import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.JSeparator;
import java.awt.TextField;
import java.awt.Label;
import java.awt.List;
import java.awt.Button;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import java.io.Serializable;

public class VueSaisieParution extends Vue{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField textFieldISSN ;
	private JTextField textFieldTitre;
	private JButton buttonRechercher;
	private JButton buttonAnnuler;
	private JButton btnEnregistrer;
	private JButton btnAnnuler1;
	private JSeparator separator;
	private JLabel lblISSN;
	private JLabel lblTitre;
	private TextField textFieldIdentifiant;
	private Label labelIdentifiant;
	private TextField textFieldDate;
	private Label labelDateParution ;
	private Button buttonAjouter;
	private List listArticle; 
	private Label labelSelectionnezArticle;
	private TreeMap<String,Article> articles;
	
	@SuppressWarnings("deprecation")
	public VueSaisieParution(Controleur controleur) {
		super(controleur);setTitle("Enregistrement d'une nouvelle parution");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 450, 567);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		lblISSN = new JLabel("ISSN");
		lblISSN.setHorizontalAlignment(SwingConstants.RIGHT);
		lblISSN.setBounds(99, 32, 61, 15);
		contentPane.add(lblISSN);
		
		textFieldISSN = new JTextField();
		textFieldISSN.setBounds(170, 32, 141, 19);
		contentPane.add(textFieldISSN);
		textFieldISSN.setColumns(10);
		
		lblTitre = new JLabel("Titre");
		lblTitre.setHorizontalAlignment(SwingConstants.RIGHT);
		lblTitre.setBounds(99, 66, 61, 15);
		contentPane.add(lblTitre);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setEditable(false);
		textFieldTitre.setBounds(170, 63, 225, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonRechercher = new JButton("Rechercher");
		buttonRechercher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				alimenteArticle(getControleur().getArticles());
				getControleur().rechPeriodique(textFieldISSN.getText());
				}
		
			
		});
		buttonRechercher.setBounds(77, 105, 107, 25);
		contentPane.add(buttonRechercher);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);
				}
		});
		buttonAnnuler.setBounds(233, 105, 107, 25);
		contentPane.add(buttonAnnuler);
		
		separator = new JSeparator();
		separator.setBounds(0, 159, 434, 2);
		contentPane.add(separator);
		
		textFieldIdentifiant = new TextField();
		textFieldIdentifiant.setBounds(170, 188, 141, 22);
		contentPane.add(textFieldIdentifiant);
		
		labelIdentifiant = new Label("Identifiant");
		labelIdentifiant.setEnabled(false);
		labelIdentifiant.setAlignment(Label.RIGHT);
		labelIdentifiant.setBounds(98, 188, 62, 22);
		contentPane.add(labelIdentifiant);
		
		textFieldDate = new TextField();
		textFieldDate.setBounds(170, 216, 141, 22);
		contentPane.add(textFieldDate);
		
		labelDateParution = new Label("Date paurtion mm/aaaaa");
		labelDateParution.setEnabled(false);
		labelDateParution.setAlignment(Label.RIGHT);
		labelDateParution.setBounds(10, 226, 150, 22);
		contentPane.add(labelDateParution);
		
		buttonAjouter = new Button("Ajouter");
		buttonAjouter.setEnabled(false);
		buttonAjouter.setBounds(339, 316, 70, 22);
		contentPane.add(buttonAjouter);
		buttonAjouter.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			getControleur(). nouvelleArticle();
				}
		});
		
		labelSelectionnezArticle = new Label("Selectionnez article(s)");
		labelSelectionnezArticle.setEnabled(false);
		labelSelectionnezArticle.setBounds(30, 271, 130, 22);
		contentPane.add(labelSelectionnezArticle);
		
		btnEnregistrer = new JButton("Enregistrer");
		btnEnregistrer.setEnabled(false);
		btnEnregistrer.setBounds(71, 479, 113, 23);
		contentPane.add(btnEnregistrer);
		btnEnregistrer.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			String id =  textFieldIdentifiant.getText();
			String date = textFieldDate.getText();
			String issn = textFieldISSN.getText();
			String[] article = listArticle.getSelectedItems();
			Periodique per = getControleur().getPeriodique(issn);
			articles =new TreeMap<String, Article>();
			int j=0;
			while (j<article.length){
				Article m = getControleur().getArticle(article[j]);
				articles.put(article[j], m);
				j=j+1;
			}
			getControleur().nouvParution(per, id, date, articles);
				}
		});
		
		btnAnnuler1 = new JButton("Annuler");
		btnAnnuler1.setEnabled(false);
		btnAnnuler1.setBounds(222, 479, 121, 23);
		contentPane.add(btnAnnuler1);
		btnAnnuler1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieParution.this);
				}
		});
		
		listArticle = new List();
		listArticle.setMultipleSelections(true);
		listArticle.setEnabled(false);
		listArticle.setBounds(30, 299, 281, 113);
		contentPane.add(listArticle);
		

		
	}


	public void alimentePeriodique(Periodique per) {
		textFieldTitre.setText(per.getTitre());
	}
	
	@SuppressWarnings("deprecation")
	public void alimenteArticle(TreeMap<String, Article> TreeMap) {
		
		Set<String> cles = TreeMap.keySet();
		Iterator<String> it = cles.iterator();
		listArticle.clear();
		while (it.hasNext()){
		   String cle = (String) it.next(); // tu peux typer plus finement ici
		   Article valeur = TreeMap.get(cle); // tu peux typer plus finement ici
		   String art = valeur.getTitre();
		   listArticle.add(art);
		}
	}

	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			buttonRechercher.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			labelIdentifiant.setEnabled(false);
			textFieldDate.setEnabled(false);
			btnEnregistrer.setEnabled(false);
			btnAnnuler1.setEnabled(false);
			break;
			}
		case inter1: {
			buttonRechercher.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			lblISSN.setEnabled(false);
			textFieldIdentifiant.setEnabled(true);
			labelIdentifiant.setEnabled(true);
			textFieldDate.setEnabled(true);
			labelDateParution.setEnabled(true);
			buttonAjouter.setEnabled(true);
			listArticle.setEnabled(true);
			labelSelectionnezArticle.setEnabled(true);
			btnEnregistrer.setEnabled(true);
			btnAnnuler1.setEnabled(true);
			break;
			}
		}
	}
}


